from typing import List, Tuple

# 清洁类型常量
GCLEAN_TYPES = ("clean1", "clean2", "clean3")



class Operation:
    """表示工件的一个工序"""

    def __init__(self):
        self.id: int = 0  # 工序ID
        self.machine_names: List[str] = []  # 可用机器集合
        self.processing_times: List[float] = []  # 对应机器上的加工时间
        self.processing_time_slot: Tuple[float, float] = (0.0, 0.0)  # 加工时间段(开始,结束)
        self.move_types: List[int] = []  # move类型
        self.move_times: List[float] = []  # move时间


class Job:
    """表示一个工件"""

    def __init__(self):
        self.id: int = 0  # 工件ID
        self.name: str = ""
        self.mat_id: str = ""  # 物料编号
        self.operations: List[Operation] = []  # 工序序列


class ScheduleAssignment:
    """表示一个工序在机器上的调度分配"""

    def __init__(self):
        self.start_time: float = 0.0  # 开始时间
        self.end_time: float = 0.0  # 结束时间
        self.move_id: int = 0  # move编号
        # TODO : move_type改为int
        #self.move_type: MoveType  # move类型
        self.move_type: int = 0
        self.module_name: str = ""  # 模块名称
        self.mat_id: str = ""  # 物料编号：晶圆盒编号+物料编号
        self.slot_id: int = 1  # 槽位ID



